package com.taoyeshu.modules.sys.controller;

import java.util.List;
import java.util.Map;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONObject;
import com.taoyeshu.common.annotation.SystemControllerLog;
import com.taoyeshu.common.utils.TreeObject;
import com.taoyeshu.common.utils.ZTreeObject;
import com.taoyeshu.common.web.BaseController;
import com.taoyeshu.modules.sys.entity.Resource;
import com.taoyeshu.modules.sys.service.ResourceService;
import com.taoyeshu.modules.sys.utils.ResUtil;
import com.taoyeshu.modules.sys.utils.TreeUtil;

@Controller
@RequestMapping("/sys/resource/")
public class ResourceController extends BaseController {

	@Autowired
	private ResourceService resourceService;

	@ModelAttribute
	public void getResource(@RequestParam(value = "id", required = false) Integer id, Map<String, Object> map) {
		if (id != null) {
			map.put("resource", resourceService.getById(id));
		}
	}

	/**
	 * 
	 * @描述:列表试图
	 * @方法名称 :list
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:29:27
	 * @return
	 *
	 */
	@RequestMapping("list")
	@RequiresPermissions("sys:resource:view")
	public String list() {
		return "modules/sys/resource/list";
	}

	/**
	 * 
	 * @描述:列表数据
	 * @方法名称 :listData
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:29:00
	 *
	 */
	@ResponseBody
	@RequiresPermissions("sys:resource:view")
	@RequestMapping(value = "listData")
	@SystemControllerLog(description = "查看资源")
	public JSONObject listData(Integer nodeid) {
		JSONObject json = new JSONObject();
		TreeUtil treeUtil = new TreeUtil();
		TreeObject[] rows = treeUtil.getTreeObjects(resourceService.queryByParentId(nodeid));
		json.put("rows", rows);
		return json;
	}

	/**
	 * 
	 * @描述:新增资源试图
	 * @方法名称 :addView
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:28:49
	 *
	 */
	@RequiresPermissions("sys:resource:add")
	@RequestMapping(value = "addView")
	public String addView(Model model) {
		List<Resource> list = resourceService.queryParents();
		ResUtil resUtil = new ResUtil();
		List<Resource> treeObjects = resUtil.getChildTreeObjects(list, 0);
		model.addAttribute("parents", treeObjects);
		return "modules/sys/resource/add";
	}

	/**
	 * 
	 * @描述:新增资源
	 * @方法名称 :add
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:28:39
	 *
	 */
	@ResponseBody
	@RequiresPermissions("sys:resource:add")
	@RequestMapping(value = "add")
	@SystemControllerLog(description = "新增资源")
	public JSONObject add(Resource resource) {
		JSONObject json = new JSONObject();
		int id = resourceService.save(resource);
		if (id != 0) {
			json.put("code", 200);
			json.put("message", "success");
		} else {
			json.put("code", 999);
			json.put("message", "fail");
		}
		return json;
	}

	/**
	 * 
	 * @描述:修改资源视图
	 * @方法名称 :updateView
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:28:22
	 * @param resource
	 * @param model
	 * @return
	 *
	 */
	@RequiresPermissions("sys:resource:update")
	@RequestMapping(value = "updateView")
	public String updateView(Resource resource, Model model) {
		List<Resource> list = resourceService.queryParents();
		ResUtil resUtil = new ResUtil();
		List<Resource> treeObjects = resUtil.getChildTreeObjects(list, 0);
		model.addAttribute("parents", treeObjects);
		model.addAttribute("resource", resource);
		return "modules/sys/resource/update";
	}

	/**
	 * 
	 * @描述:修改资源
	 * @方法名称 :update
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:28:13
	 * @param resource
	 * @return
	 *
	 */
	@ResponseBody
	@RequiresPermissions("sys:resource:update")
	@RequestMapping(value = "update")
	@SystemControllerLog(description = "修改资源")
	public JSONObject update(Resource resource) {
		JSONObject json = new JSONObject();
		try {
			resourceService.update(resource);
			json.put("code", 200);
			json.put("message", "success");
			return json;
		} catch (Exception e) {
			e.printStackTrace();
			json.put("code", 999);
			json.put("message", "fail");
			return json;
		}
	}

	/**
	 * 
	 * @描述:删除资源
	 * @方法名称 :delete
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:28:01
	 * @param resource
	 * @return
	 *
	 */
	@ResponseBody
	@RequiresPermissions("sys:resource:delete")
	@RequestMapping(value = "delete")
	@SystemControllerLog(description = "删除资源")
	public JSONObject delete(Resource resource) {
		JSONObject json = new JSONObject();
		try {
			resourceService.delete(resource);
			json.put("code", 200);
			json.put("message", "success");
			return json;
		} catch (Exception e) {
			json.put("code", 999);
			json.put("message", "fail");
			return json;
		}
	}

	/**
	 * 
	 * @描述:分配资源的树状数据
	 * @方法名称 :treeData
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:27:30
	 * @param roleId
	 * @return
	 *
	 */
	@ResponseBody
	@RequestMapping(value = "treeData")
	public ZTreeObject[] treeData(Integer roleId) {
		TreeUtil treeUtil = new TreeUtil();
		List<Resource> listByRoleId = resourceService.queryByRoleId(roleId);
		ZTreeObject[] rows = treeUtil.getZTreeObjects(resourceService.queryAll(), listByRoleId);
		return rows;
	}
}
